﻿// -----------------------------------------------------------------------
//  <copyright file="HlsPlaylistParameters.cs" company="Henric Jungheim">
//  Copyright (c) 2012-2014.
//  <author>Henric Jungheim</author>
//  </copyright>
// -----------------------------------------------------------------------
// Copyright (c) 2012-2014 Henric Jungheim <software@henric.org>
// 
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.

using System;
using SM.Media.M3U8;
using SM.Media.Playlists;

namespace SM.Media.Hls
{
    public class HlsPlaylistParameters
    {
        TimeSpan _excessiveDuration = TimeSpan.FromMinutes(5);
        Func<M3U8Parser, bool> _isDynamicPlaylist;
        TimeSpan _maximumReload = TimeSpan.FromMinutes(2);
        TimeSpan _minimumReload = TimeSpan.FromSeconds(5);
        TimeSpan _minimumRetry = TimeSpan.FromMilliseconds(333);

        /// <summary>
        ///     The minimum interval between dynamic playlist reloads.
        /// </summary>
        public TimeSpan MinimumReload
        {
            get { return _minimumReload; }
            set { _minimumReload = value; }
        }

        /// <summary>
        ///     The maximum interval between dynamic playlist reloads.
        /// </summary>
        public TimeSpan MaximumReload
        {
            get { return _maximumReload; }
            set { _maximumReload = value; }
        }

        /// <summary>
        ///     If any segment's duration is greater than this, then all of the playlist's segment durations are considered
        ///     invalid.
        /// </summary>
        public TimeSpan ExcessiveDuration
        {
            get { return _excessiveDuration; }
            set { _excessiveDuration = value; }
        }

        /// <summary>
        ///     The minimum time between attempts to fetch the playlist.  This limits the rate of retries when the
        ///     dynamic playlist reload interval has expired but no new playlist segments have been found.
        /// </summary>
        public TimeSpan MinimumRetry
        {
            get { return _minimumRetry; }
            set { _minimumRetry = value; }
        }

        public Func<M3U8Parser, bool> IsDynamicPlaylist
        {
            get { return _isDynamicPlaylist ?? PlaylistDefaults.IsDynamicPlayist; }
            set { _isDynamicPlaylist = value; }
        }
    }
}
